Micron Document
🎖️GitЯра🎖️

Commit a871dad7c1a3d1f3866e1bd87bbebfc5d209b1d7


Parents : 9daf427
Author : James Rich <2199651+jamesarich@users.noreply.github.com>
Signature : Signature validation error
Date : 2026-05-21T12:02:07-07:00
Committer : GitHub <noreply@github.com>
Date : 2026-05-21T19:02:07Z

chore(build): centralize feature CMP dependency wiring (#5567)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Changes
Diff

diff --git a/build-logic/convention/src/main/kotlin/KmpFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/KmpFeatureConventionPlugin.kt
index 5531c0d4dd..f64b477878 100644
--- a/build-logic/convention/src/main/kotlin/KmpFeatureConventionPlugin.kt
+++ b/build-logic/convention/src/main/kotlin/KmpFeatureConventionPlugin.kt
@@ -43,8 +43,12 @@ class KmpFeatureConventionPlugin : Plugin<Project> {
sourceSets.getByName("commonMain").dependencies {
// Compose Multiplatform UI
implementation(libs.library("compose-multiplatform-animation"))
+ implementation(libs.library("compose-multiplatform-foundation"))
implementation(libs.library("compose-multiplatform-material3"))
+ // Navigation 3 (JetBrains KMP fork — safe in commonMain)
+ implementation(libs.library("jetbrains-navigation3-ui"))
+
// Lifecycle & ViewModel (JetBrains KMP forks — safe in commonMain)
implementation(libs.library("jetbrains-lifecycle-viewmodel-compose"))
implementation(libs.library("jetbrains-lifecycle-runtime-compose"))

diff --git a/feature/connections/build.gradle.kts b/feature/connections/build.gradle.kts
index d6160c1a2f..94aafd44d3 100644
--- a/feature/connections/build.gradle.kts
+++ b/feature/connections/build.gradle.kts
@@ -22,7 +22,6 @@ kotlin {
sourceSets {
commonMain.dependencies {
- implementation(libs.compose.multiplatform.foundation)
implementation(projects.core.common)
implementation(projects.core.data)
implementation(projects.core.database)
@@ -39,8 +38,6 @@ kotlin {
implementation(projects.core.ble)
implementation(projects.core.network)
implementation(projects.feature.settings)
-
- implementation(libs.jetbrains.navigation3.ui)
}
androidMain.dependencies { implementation(libs.usb.serial.android) }

diff --git a/feature/docs/build.gradle.kts b/feature/docs/build.gradle.kts
index a783f88ca8..6899a19a4d 100644
--- a/feature/docs/build.gradle.kts
+++ b/feature/docs/build.gradle.kts
@@ -36,7 +36,7 @@ kotlin {
implementation(projects.core.di)
implementation(libs.kotlinx.collections.immutable)
- implementation(libs.jetbrains.navigation3.ui)
+ implementation(libs.jetbrains.compose.material3.adaptive)
implementation(libs.jetbrains.compose.material3.adaptive.navigation3)
implementation(libs.coil)
implementation(libs.markdown.renderer)

diff --git a/feature/firmware/build.gradle.kts b/feature/firmware/build.gradle.kts
index 8cdd054ec0..f15ed141eb 100644
--- a/feature/firmware/build.gradle.kts
+++ b/feature/firmware/build.gradle.kts
@@ -25,7 +25,6 @@ kotlin {
sourceSets {
commonMain.dependencies {
- implementation(libs.jetbrains.navigation3.ui)
implementation(projects.core.ble)
implementation(projects.core.common)
implementation(projects.core.data)

diff --git a/feature/intro/build.gradle.kts b/feature/intro/build.gradle.kts
index 0d615ab025..01cd617339 100644
--- a/feature/intro/build.gradle.kts
+++ b/feature/intro/build.gradle.kts
@@ -30,8 +30,6 @@ kotlin {
implementation(projects.core.repository)
implementation(projects.core.ui)
implementation(projects.core.resources)
-
- implementation(libs.jetbrains.navigation3.ui)
}
androidMain.dependencies { implementation(projects.core.service) }
}

diff --git a/feature/map/build.gradle.kts b/feature/map/build.gradle.kts
index 3f0f3d11cf..2830fed6ee 100644
--- a/feature/map/build.gradle.kts
+++ b/feature/map/build.gradle.kts
@@ -24,7 +24,6 @@ kotlin {
sourceSets {
commonMain.dependencies {
- implementation(libs.jetbrains.navigation3.ui)
implementation(libs.kotlinx.collections.immutable)
implementation(projects.core.data)
implementation(projects.core.database)

diff --git a/feature/messaging/build.gradle.kts b/feature/messaging/build.gradle.kts
index bedb381204..aeef8ca141 100644
--- a/feature/messaging/build.gradle.kts
+++ b/feature/messaging/build.gradle.kts
@@ -20,7 +20,6 @@ plugins { alias(libs.plugins.meshtastic.kmp.feature) }
kotlin {
sourceSets {
commonMain.dependencies {
- implementation(libs.compose.multiplatform.foundation)
implementation(projects.core.common)
implementation(projects.core.data)
implementation(projects.core.database)
@@ -33,7 +32,6 @@ kotlin {
implementation(projects.core.service)
implementation(projects.core.ui)
- implementation(libs.jetbrains.navigation3.ui)
implementation(libs.androidx.paging.common)
implementation(libs.androidx.paging.compose)

diff --git a/feature/node/build.gradle.kts b/feature/node/build.gradle.kts
index 51f0ae758e..12ed4d8799 100644
--- a/feature/node/build.gradle.kts
+++ b/feature/node/build.gradle.kts
@@ -41,7 +41,6 @@ kotlin {
implementation(projects.core.di)
implementation(projects.feature.map)
- implementation(libs.jetbrains.navigation3.ui)
implementation(libs.markdown.renderer)
implementation(libs.markdown.renderer.m3)
implementation(libs.vico.compose)

diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/metrics/DeviceMetrics.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/metrics/DeviceMetrics.kt
index 4caa71bf7b..86b2e3a45b 100644
--- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/metrics/DeviceMetrics.kt
+++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/metrics/DeviceMetrics.kt
@@ -399,7 +399,12 @@ private fun DeviceMetricsChartPreview() {
@Composable
@Suppress("LongMethod")
-private fun DeviceMetricsCard(telemetry: Telemetry, isSelected: Boolean, onClick: () -> Unit) {
+private fun DeviceMetricsCard(
+ telemetry: Telemetry,
+ isSelected: Boolean,
+ onClick: () -> Unit,
+ timeTextOverride: String? = null,
+) {
val deviceMetrics = telemetry.device_metrics
val time = telemetry.time.toLong() * MS_PER_SEC
val channelUtilizationLabel = stringResource(Res.string.channel_utilization)
@@ -412,7 +417,7 @@ private fun DeviceMetricsCard(telemetry: Telemetry, isSelected: Boolean, onClick
/* Time, Battery, and Voltage */
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween) {
Text(
- text = DateFormatter.formatDateTime(time),
+ text = timeTextOverride ?: DateFormatter.formatDateTime(time),
style = MaterialTheme.typography.titleMediumEmphasized,
fontWeight = FontWeight.Bold,
)
@@ -490,7 +495,14 @@ fun DeviceMetricsCardPreview() {
uptime_seconds = 7200,
),
)
- AppTheme { DeviceMetricsCard(telemetry = telemetry, isSelected = false, onClick = {}) }
+ AppTheme {
+ DeviceMetricsCard(
+ telemetry = telemetry,
+ isSelected = false,
+ onClick = {},
+ timeTextOverride = "2023-11-14 22:13",
+ )
+ }
}
@PreviewLightDark

diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/metrics/EnvironmentMetrics.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/metrics/EnvironmentMetrics.kt
index f843eefbe3..bb2debd454 100644
--- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/metrics/EnvironmentMetrics.kt
+++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/metrics/EnvironmentMetrics.kt
@@ -505,14 +505,18 @@ private fun EnvironmentMetricsCard(
}
@Composable
-private fun EnvironmentMetricsContent(telemetry: Telemetry, environmentDisplayFahrenheit: Boolean) {
+private fun EnvironmentMetricsContent(
+ telemetry: Telemetry,
+ environmentDisplayFahrenheit: Boolean,
+ timeTextOverride: String? = null,
+) {
val envMetrics = telemetry.environment_metrics ?: org.meshtastic.proto.EnvironmentMetrics()
val time = telemetry.time.toLong() * MS_PER_SEC
Column(modifier = Modifier.fillMaxWidth().padding(12.dp)) {
/* Time and Temperature */
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween) {
Text(
- text = DateFormatter.formatDateTime(time),
+ text = timeTextOverride ?: DateFormatter.formatDateTime(time),
style = MaterialTheme.typography.titleMediumEmphasized,
fontWeight = FontWeight.Bold,
)
@@ -563,5 +567,13 @@ fun PreviewEnvironmentMetricsContent() {
rainfall_24h = 12.3f,
)
val fakeTelemetry = Telemetry(time = 1700000000, environment_metrics = fakeEnvMetrics)
- AppTheme { Surface { EnvironmentMetricsContent(telemetry = fakeTelemetry, environmentDisplayFahrenheit = false) } }
+ AppTheme {
+ Surface {
+ EnvironmentMetricsContent(
+ telemetry = fakeTelemetry,
+ environmentDisplayFahrenheit = false,
+ timeTextOverride = "2023-11-14 22:13",
+ )
+ }
+ }
}

diff --git a/feature/settings/build.gradle.kts b/feature/settings/build.gradle.kts
index 3ef213edd5..83175f1441 100644
--- a/feature/settings/build.gradle.kts
+++ b/feature/settings/build.gradle.kts
@@ -42,7 +42,6 @@ kotlin {
implementation(libs.kotlinx.collections.immutable)
implementation(libs.aboutlibraries.compose.m3)
- implementation(libs.jetbrains.navigation3.ui)
}
androidMain.dependencies {

diff --git a/feature/wifi-provision/build.gradle.kts b/feature/wifi-provision/build.gradle.kts
index ec0b4a0fe9..95fe576445 100644
--- a/feature/wifi-provision/build.gradle.kts
+++ b/feature/wifi-provision/build.gradle.kts
@@ -34,7 +34,6 @@ kotlin {
implementation(projects.core.resources)
implementation(projects.core.ui)
- implementation(libs.jetbrains.navigation3.ui)
implementation(libs.kotlinx.serialization.json)
}
}

diff --git a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotDeviceMetricsCard_Dark_d19fbf1f_0.png b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotDeviceMetricsCard_Dark_d19fbf1f_0.png
index bd01926438..654cfacfd7 100644
Binary files a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotDeviceMetricsCard_Dark_d19fbf1f_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotDeviceMetricsCard_Dark_d19fbf1f_0.png differ

diff --git a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotDeviceMetricsCard_Light_b29dc7a7_0.png b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotDeviceMetricsCard_Light_b29dc7a7_0.png
index bd01926438..bb29a8f894 100644
Binary files a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotDeviceMetricsCard_Light_b29dc7a7_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotDeviceMetricsCard_Light_b29dc7a7_0.png differ

diff --git a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotEnvironmentMetricsContent_Dark_d19fbf1f_0.png b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotEnvironmentMetricsContent_Dark_d19fbf1f_0.png
index bd01926438..d5a0185d13 100644
Binary files a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotEnvironmentMetricsContent_Dark_d19fbf1f_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotEnvironmentMetricsContent_Dark_d19fbf1f_0.png differ

diff --git a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotEnvironmentMetricsContent_Light_b29dc7a7_0.png b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotEnvironmentMetricsContent_Light_b29dc7a7_0.png
index bd01926438..8df596a816 100644
Binary files a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotEnvironmentMetricsContent_Light_b29dc7a7_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotEnvironmentMetricsContent_Light_b29dc7a7_0.png differ

Served by rngit 1.5.2 - Generated in 0.26s